function checkCurrentSheet(o, x, name) {
  if (x.currentSheet === '') {
    o.push('请设置 ' + name + ' 文件使用的表')
  }
}

function checkNameColumn(o, x, name) {
  if (x.nameColumn === '') {
    o.push('请设置 ' + name + ' 文件的名称列')
  }
}

export function genNumberColumn(o, x, name) {
  const result = {}
  let conflict = false
  for (const i of Object.keys(x.numberColumn)) {
    if (x.numberColumn[i] == null) {
      continue
    }
    const label = x.numberColumn[i]
    if (result[label] != null) {
      o.push(name + ' 文件中的 [' + label + '] 数值标签重复定义')
      conflict = true
      continue
    }
    result[label] = i
  }
  return [result, conflict]
}

function checkNumberMatch(o, a, b) {
  // check b in a (b+)
  for (const i of Object.keys(b)) {
    if (a[i] == null) {
      o.push('B 文件所需的数值列 [' + i + '] 在 A 文件中没有定义')
    }
  }
  // check a in b (a+)
  for (const i of Object.keys(a)) {
    if (b[i] == null) {
      o.push('A 文件的数值列 [' + i + '] 在 B 文件中没有定义')
    }
  }
}

export default function (a, b) {
  const o = []
  checkCurrentSheet(o, a, 'A')
  checkCurrentSheet(o, b, 'B')
  checkNameColumn(o, a, 'A')
  checkNameColumn(o, b, 'B')

  const [numberA, conflictA] = genNumberColumn(o, a, 'A')
  const [numberB, conflictB] = genNumberColumn(o, b, 'B')
  if ((!conflictA) && (!conflictB)) {
    checkNumberMatch(o, numberA, numberB)
  }

  if (o.length > 0) {
    return o
  }
  return null
}
